package controller;

import helper.AngepassteException;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Ebene;
import model.Feld;

@WebServlet({ "/FeldInhalt" })
public class FeldInhalt extends SessionControll {
	private static final long serialVersionUID = -3383990737456909008L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public FeldInhalt() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		if (super.loginPruefen(request, response)) {
			String wert = "";
			try {
				int eId = Integer.parseInt(request.getParameter("ebenenid"));
				long eVer = Long.parseLong(request
						.getParameter("ebenenversion"));
				Ebene[] e = ebenenRepository.getEbeneNachId(eId);
				if (e != null) {
					for (int i = 0; i < e.length; i++) {
						if (e[i].getErstellungszeit() == eVer) {
							try {
								if ("prosa".equals(request
										.getParameter("feldid"))) {
									if (e[i].getProsa() != null) {
										wert = e[i].getProsa().getWert();
									}
								} else {
									int fId = Integer.parseInt(request
											.getParameter("feldid"));
									Feld f[] = e[i].getFeld();
									if (f != null) {
										for (int j = 0; j < f.length; j++) {
											if (f[j].getId() == fId) {
												wert = f[j].getWert();
												break;
											}
										}
									}
								}
							} catch (ClassNotFoundException e1) {
								new helper.Logging("Fehler F070",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
								throw new AngepassteException("Fehler?weiterleitung=FeldInhalt&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F070)");
							} catch (SQLException e1) {
								new helper.Logging("Fehler F071",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
								throw new AngepassteException("Fehler?weiterleitung=FeldInhalt&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F071)");
							}
							break;
						}
					}
				}
			} catch (NumberFormatException e) {
				new helper.Logging("Fehler F072",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
				response.sendRedirect("Fehler?weiterleitung=FeldInhalt&fehler=Es gab einen Formatfehler! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F072)");
			} catch(AngepassteException e){
				response.sendRedirect(e.getMessage());
			}
			request.setAttribute("feldwert", wert);
			RequestDispatcher view;
			view = request.getRequestDispatcher("FeldInhalt.jsp");
			view.forward(request, response);
		}
	}
}
